package com.polaris.live.ui.game.js

import android.app.Activity
import android.webkit.JavascriptInterface
import com.blankj.utilcode.util.GsonUtils
import com.just.agentweb.AgentWeb
import com.polaris.live.common.cacha.UserManager
import com.polaris.live.common.util.JsonUtils
import com.polaris.live.common.util.LogExt
import com.polaris.live.resp.bean.GameBean
import com.polaris.live.resp.bean.YomiGameExtBean
import com.polaris.live.resp.bean.YomiGetConfig
import com.polaris.live.utils.image.ImageUtils

/**
 * NativeBridge
 * @author Created by 天晴 on 2024/1/15 10:33
 * @since 1.0.0
 */
class YomiNativeBridge(
    activity: Activity,
    private val gameBean: GameBean,
    agent: AgentWeb,
    private val recharge: () -> Unit,
    private val destroy: () -> Unit,
) : AbstractNativeJsBridgeProxy(activity, agent) {

    @JavascriptInterface
    fun getConfig(): String {
        val configData = YomiGetConfig()
        val gameExtBean = GsonUtils.fromJson(gameBean.gameVo.ext, YomiGameExtBean::class.java)
        configData.userId = gameBean.userId
        configData.headURL = ImageUtils.imgPath(UserManager.getUser().avatar)
        configData.code = gameBean.gameVo.gameValidCode
        configData.gameMode = gameBean.gameMode
        configData.language = gameBean.language
        configData.currencyIcon = ImageUtils.imgPath(gameExtBean.currencyIcon)
        configData.merchantId = (gameExtBean.appId ?: 8678313173).toString()
        configData.platform = gameExtBean.platform
        configData.roomId = gameBean.roomId
        return JsonUtils.toJson(configData)
    }

    /**
     * destroy销毁游戏
     * 当游戏需要主动关闭时会通知APP，由APP关闭WebView。
     */
    @JavascriptInterface
    fun closeGame() {
        LogExt.logI("Yomi", " 游戏调⽤ destroy")
        //关闭游戏TODO客⼾端
        destroy.invoke()
    }

    /**
     * ameRecharge提⽰余额不⾜
     * 当游戏币不⾜或者点击⾦币图标时会通知APP，由APP打开商城⻚
     */
    @JavascriptInterface
    fun insufficient() {
        LogExt.logI("Yomi", " 游戏调⽤ gameRecharge")
        recharge.invoke()
    }

    /**
     * gameLoaded游戏加载完
     * 当游戏加载完毕，展⽰游戏中画⾯时会通知APP。
     * PS:拉起游戏后，APP可以优先展⽰⾃⼰的加载动画，收到通知关闭加载动画）
     */
    @JavascriptInterface
    fun hideSplash() {
        LogExt.logI("Yomi", " 游戏调⽤ 游戏加载完成")
        //游戏加载完成，App端隐藏遮罩图片
    }
}
